home *** CD-ROM | disk | FTP | other *** search
Wrap
/* $VER: IconSorter.rexx 0.9 (20.10.99) Copyright (c) by Nils Görs This script sorts icons in alphabetical order. It will check for Icon weight and height, supports space between icons etc.pp. This script needs following arexx-libraries: - rexxreqtools.library - rexxtricks.library - rexxdossupport.library Template: ORDER/M/K,SPACEX/N/K,SPACEY/N/K,SAMEHEIGHT/S,NAMECHECK/S Parameters: ORDER = TOOL , DRAWER , PROJECT SPACEX = number of pixel between horizontal icons. SPACEY = number of pixel between vertical icons. SAMEHEIGHT = if set all icons will have the same height. NAMECHECK = will check the width of the Iconname and use it. Example: IconSorter.rexx ORDER=TOOL PROJECT DRAWER SPACEX=20 Will sort the icons in following order: TOOL PROJECT DRAWER The space between two horizontal icons will be 20 pixels. */ spacex = 5 /* x pixel between horizontal icons */ spacey = 3 /* x pixel between vertical icons */ posxstart = 18 /* start x position */ posystart = 10 /* start y position */ fontheight = 13 /* standard value */ SameHeight = "No" /* If "Yes" the largest icon will be used for position calculation. */ NameCheck = "No" /* If "Yes" the width from Iconname will be used. */ /* Please do not change anything under this line */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ NL = '0a'x options results PARSE ARG input ADDRESS WORKBENCH /* Check workbench.library version */ minversion = "44.1226" GETATTR APPLICATION.VERSION wbversion = result IF wbversion < minversion THEN DO call rtezrequest("You are using workbench.library v"||wbversion||NL||"This scripts needs workbench.library v"||minversion||" or higher","_Thanks","IconSorter.rexx",) EXIT END GETATTR OBJECT WINDOWS.ACTIVE activeWin = result GETATTR OBJECT WINDOW.ICONS.ALL.COUNT NAME activeWin numofIcons = result If numofIcons = 0 THEN EXIT CALL _InitAll /* write all icon informations in a seperate ** variable and get the max size from an icon. */ maxiconheight = 0 maxiconwidth = 0 do i = 0 to numofIcons-1 GETATTR OBJECT WINDOW.ICONS.ALL.i NAME activeWin STEM IconInfo.i IF maxiconheight < IconInfo.i.height THEN maxiconheight = IconInfo.i.height IF maxiconwidth < IconInfo.i.width THEN maxiconwidth = IconInfo.i.width IF NameCheck = "YES" THEN DO GETATTR APPLICATION.FONT.SCREEN.SIZE NAME '"'||IconInfo.i.name||'"' /* check the wide from iconname */ IF result > maxiconwidth then maxiconwidth = result END end /* sorting icons */ d = 0 t = 0 p = 0 do i = 0 to numofIcons-1 SELECT WHEN IconInfo.i.type = "DRAWER" THEN DO d = d +1 drawerVar.d = i END WHEN IconInfo.i.type = "TOOL" THEN DO t = t +1 toolVar.t = i END WHEN IconInfo.i.type = "PROJECT" THEN DO p = p +1 projectVar.p = i END OTHERWISE NOP END end DrawerVar.0 = d ToolVar.0 = t ProjectVar.0 = p /* how many icons per row? */ GETATTR OBJECT WINDOW.HEIGHT NAME activeWin winheight = result iconfont = maxiconheight + fontheight + spacey /* icon + font height */ winheight2 = winheight-posystart IconsPerRow=TRUNC((winheight2/iconfont)-0.5) /* how many Icons per row? */ IF IconsPerRow <=0 THEN IconsPerRow = 1 /* ** If the user does not specified an sort order, ** standard-order will be used instead. */ IF order.count ~= 0 THEN DO do o = 0 to order.count-1 IF order.o = "TOOL" THEN CALL SortTools IF order.o = "DRAWER" THEN CALL SortDrawers IF order.o = "PROJECT" THEN CALL SortProject end END ELSE DO CALL SortDrawers CALL SortTools CALL SortProject END erg=rtezrequest("Resize window?","_Yes|_No","IconSorter.rexx",) IF erg = 1 THEN MENU INVOKE WINDOW.RESIZETOFIT IF changes ~= 0 THEN DO /* any changes to the window? */ Erg=rtezrequest("Save changes to disk?","_Yes|_No","IconSorter.rexx",) IF erg = 1 THEN MENU WINDOW '"'||activeWin||'"' INVOKE WINDOW.SNAPSHOT.ALL END EXIT /* subroutines */ SortDrawers: IF drawervar.0 = 0 THEN RETURN /* create a dump variable <Iconname> <Position> */ do i = 1 to drawervar.0 e = drawervar.i drawervar2.i = IconInfo.e.name e end drawervar2.0 = drawervar.0 CALL RXTR_QSORT(drawervar2,sortedvar,NOCASE,,) CALL SetIcons RETURN SortTools: IF toolvar.0 = 0 THEN RETURN /* create a dump variable <Iconname> <Position> */ do i = 1 to toolvar.0 e = toolvar.i toolvar2.i = IconInfo.e.name e end toolvar2.0 = toolvar.0 CALL RXTR_QSORT(toolvar2,sortedvar,NOCASE,,) CALL SetIcons RETURN SortProject: IF Projectvar.0 = 0 THEN RETURN /* create a dump variable <Iconname> <Position> */ do i = 1 to Projectvar.0 e = Projectvar.i Projectvar2.i = IconInfo.e.name e end Projectvar2.0 = Projectvar.0 CALL RXTR_QSORT(Projectvar2,sortedvar,NOCASE,,) CALL SetIcons RETURN /* This routine is to position all icons */ SetIcons: LOCKGUI do i = 1 to sortedvar.0 IF r < IconsPerRow THEN DO r = r + 1 anz=WORDS(sortedvar.i) /* how man words? <Iconname> <Pos> */ e = WORD(sortedvar.i,anz) /* get Index.<Pos> of Icon */ IconName = SUBWORD(sortedvar.i,1,anz-1) ICON WINDOW activeWin '"'||IconName||'"' X posx Y posy IF SameHeight = "YES" THEN posY = posY + spaceY + maxiconheight + fontheight ELSE DO posy = spacey+posy+IconInfo.e.height+fontheight /* calculate new position */ h = i+1 IF h > sortedvar.0 THEN NOP ELSE DO anz2=WORDS(sortedvar.h) /* how man words? <Iconname> <Pos> */ f = WORD(sortedvar.h,anz2) /* get Index.<Pos> of Icon */ spaceNeed = posy+spacey+IconInfo.f.height+fontheight IF r = IconsPerRow THEN IF winheight > spaceneed THEN DO spaceNeed = IconInfo.f.height+fontheight+posystart IF SpaceNeed+posy < winheight THEN r = r-1 END END END END ELSE DO /* next ROW */ i = i - 1 posy = posystart r = 0 posx = posx + maxiconwidth + spacex END end UNLOCKGUI changes = 1 RETURN _InitAll: changes = 0 /* var to check if something changed */ posx = posxstart posy = posystart r = 0 /* row counter */ Template = "ORDER/M/K,SPACEX/N/K,SPACEY/N/K,SAMEHEIGHT/S,NAMECHECK/S" /* ** Open libs */ IF ~SHOW(LIBRARIES,'rexxtricks.library') THEN IF ~ADDLIB('rexxtricks.library',9,-30,38) THEN quit('Cannot open rexxtricks.library!',10) IF ~SHOW('LIBRARIES','rexxreqtools.library') THEN IF ~ADDLIB('rexxreqtools.library',9,-30,0) THEN quit('Cannot open rexxreqtools.library!',10) IF ~SHOW('LIBRARIES','rexxdossupport.library') THEN IF ~ADDLIB('rexxdossupport.library',9,-30,0) THEN quit('Cannot open rexxdossupport.library!',10) GETATTR APPLICATION.FONT.SCREEN.HEIGHT fontheight = result order.count = 0 IF input ~= "" THEN DO call ReadArgs(input,Template) IF sameheight = 1 THEN SameHeight = "yes" IF NameCheck = 1 THEN NameCheck = "yes" END SameHeight = UPPER(SameHeight) NameCheck= UPPER(NameCheck) RETURN